package br.com.intelsys.basics.utils;

import java.util.Date;

public class DateKnife {
	/**
	 * Calcula a diferença de duas datas em dias <br>
	 * <b>Importante:</b> Quando realiza a diferença em dias entre duas datas,
	 * este método considera as horas restantes e as converte em fração de dias.
	 * 
	 * @param start
	 * @param end
	 * @return quantidade de dias existentes entre a dataInicial e dataFinal.
	 */
	public static int diffDays(Date start, Date end) {
		Double result = 0d;
		long diferenca = end.getTime() - start.getTime();
		double diferencaEmDias = (diferenca / 1000) / 60 / 60 / 24;
		long horasRestantes = (diferenca / 1000) / 60 / 60 % 24;
		result = diferencaEmDias + (horasRestantes / 24d);
		return result.intValue();
	}

	/**
	 * Calcula a diferença de duas datas em horas <br>
	 * <b>Importante:</b> Quando realiza a diferença em horas entre duas datas,
	 * este método considera os minutos restantes e os converte em fração de
	 * horas.
	 * 
	 * @param start
	 * @param end
	 * @return quantidade de horas existentes entre a dataInicial e dataFinal.
	 */
	public static int diffHours(Date start, Date end) {
		Double result = 0d;
		long diferenca = end.getTime() - start.getTime();
		long diferencaEmHoras = (diferenca / 1000) / 60 / 60;
		long minutosRestantes = (diferenca / 1000) / 60 % 60;
		double horasRestantes = minutosRestantes / 60d;
		result = diferencaEmHoras + (horasRestantes);
		return result.intValue();
	}

	/**
	 * Calcula a diferença de duas datas em minutos <br>
	 * <b>Importante:</b> Quando realiza a diferença em minutos entre duas
	 * datas, este método considera os segundos restantes e os converte em
	 * fração de minutos.
	 * 
	 * @param start
	 * @param end
	 * @return quantidade de minutos existentes entre a dataInicial e dataFinal.
	 */
	public static int diffMinutess(Date start, Date end) {
		Double result = 0d;
		long diferenca = end.getTime() - start.getTime();
		double diferencaEmMinutos = (diferenca / 1000) / 60;
		long segundosRestantes = (diferenca / 1000) % 60;
		result = diferencaEmMinutos + (segundosRestantes / 60d);
		return result.intValue();
	}
}
